package com.example.samplemanagement.model;

import com.fasterxml.jackson.annotation.JsonIgnore; // <-- UNCOMMENT THIS IMPORT
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List; // <-- UNCOMMENT THIS IMPORT if it was commented out

// Sample.java
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "sample") // 明确指定表名
public class Sample {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(unique = true, nullable = false)
    private String sampleNumber;   // 样品编号：唯一标识每一个样品，便于追踪和管理。
    @Column(nullable = false)
    private String sampleName;     // 样品名称：描述样品的名称，便于识别。

    // 现有字段
    private String category;       // 品类 (保留原有字段)
    private String designer;       // 设计师 (保留原有字段)

    // 新增字段
    private String sampleType;     // 样品类型：描述样品的类型，如原材料、成品、半成品等。
    private String sampleSource;   // 样品来源：描述样品的来源，如供应商名称、采购日期等。
    @Column(nullable = false)
    private String status;         // 样品状态：描述样品的当前状态，如已接收、测试中、已退回等。
    private String storageLocation; // 样品存储位置：描述样品的存储位置，如仓库名称、货架编号等。
    @Column(columnDefinition = "TEXT") // 使用TEXT类型存储较长文本
    private String usageStatus;    // 样品使用情况：描述样品的使用情况，如使用记录、使用结果等。
    @Column(columnDefinition = "TEXT") // 使用TEXT类型存储较长文本
    private String notes;          // 样品备注：描述样品的特殊要求、注意事项等。

    @Column(nullable = false, updatable = false) // 创建日期，不可更新
    private LocalDate creationDate; // 创建日期
    private LocalDateTime lastUpdated; // 最后更新时间

    // IMPORTANT: Keep this SampleTracking-related List and annotate with @JsonIgnore
    // Assuming a OneToMany relationship between Sample and SampleTracking
    @OneToMany(mappedBy = "sample", cascade = CascadeType.ALL, orphanRemoval = true)
    @JsonIgnore // <-- UNCOMMENT THIS ANNOTATION
    private List<SampleTracking> sampleTrackings;

    // Removed Feedback related OneToMany relationship as per user clarification
    // @OneToMany(mappedBy = "sample", cascade = CascadeType.ALL, orphanRemoval = true)
    // @JsonIgnore
    // private List<Feedback> feedbacks;


    @PrePersist // 在实体持久化前执行，用于设置创建日期和首次更新时间
    protected void onCreate() {
        if (this.creationDate == null) {
            this.creationDate = LocalDate.now();
        }
        this.lastUpdated = LocalDateTime.now();
        // 确保status有默认值
        if (this.status == null || this.status.isEmpty()) {
            this.status = "待处理"; // 设置一个默认状态
        }
    }

    @PreUpdate // 在实体更新前执行，用于更新最后更新时间
    protected void onUpdate() {
        this.lastUpdated = LocalDateTime.now();
    }
}
